package com.william.aggregate;

import com.william.aggregate.model.TimeSeriesData;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 时间序列数据计算器
 */
@Slf4j
public class TimeSeriesCalculator {

    /**
     * 计算时间序列数据并将结果存入summary字段
     *
     * @param dataList 数据列表
     * @param calculator 自定义计算器 (可选)
     * @return 更新后的数据列表
     */
    public List<TimeSeriesData> calculate(List<TimeSeriesData> dataList, 
                                        ICalculator calculator) {
        if (dataList == null || dataList.isEmpty()) {
            return new ArrayList<>();
        }
        if (calculator == null) {
            log.error("计算器不能为空");
            throw new IllegalArgumentException("计算器不能为空");
        }


        try {
            return dataList.stream()
                    .peek(data -> {
                        // 校验数据完整性
                        if (data.getValues() == null) {
                            log.error("数据格式不正确: {}", data);
                            throw new IllegalArgumentException("数据格式不正确");
                        }
                        // 计算汇总值
                        double summary = calculator.calculate(data.getValues());
                        data.setSummary(summary);
                    })
                    .collect(Collectors.toList());
        } catch (Exception e) {
            log.error("计算时间序列数据失败", e);
            throw new RuntimeException("计算时间序列数据失败", e);
        }
    }

    /**
     * 计算器接口
     */

} 